package com.atguigu.gulimall.gulimallcoupon;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.context.config.annotation.RefreshScope;

/**
 * 1、整合mybatis-plus
 *      1、导入依赖（mybatis-plus-boot-starters）
 *      2、配置
 *          1）配置数据源
 *              1、导入驱动（mysql-connector-java）
 *              2、配置数据源
 *           2）配置mybatis-plus
 *              1、使用@MapperScan扫描Mapper(Dao)接口
 *              2、告诉mybatis-plus，sql文件的映射位置
 *  ----------------------------------------------------------------------------------------
 *  2、服务注册到nacos(注册中心)
 *      1、导入nacos discovery starter(在gulimall-common中已经导入，所以可忽略)
 *      2、配置Nacos Server地址
 *          1）、 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
 *          2）、配置应用名   application.name=gulimall-coupon
 *      3、使用@EnableDiscoveryClient注解开启服务注册与发现功能
 *  ----------------------------------------------------------------------------------------
 *  3、远程调用别的服务
 *      1）、引入open-feign
 *      2）、编写一个接口，告诉springcloud这个接口需要调用远程服务,添加@@FeignClient("gulimall-coupon")
 *          1、声明接口的每一个方法都是调用哪个远程服务的哪个请求
 *      3）、开启远程调用功能@EnableFeignClients(basepages="")
 *  ----------------------------------------------------------------------------------------
 *  4、使用Nacos作为配置中心
 *      1、引入Nacos config starter启动器
 *      2、在/src/main/resources/下创建bootstrap.properties文件
 *              1)、配置应用的名字
 *              2）、指定配置中心的地址
 *      3、动态获取：@Value和@RefreshScope注解。在使用该注解的类上添加 @RefreshScope（动态刷新）注解，例如在CouponController上添加
 *      4、在Nacos客户端的配置中心添加配置文件gulimall-coupon.properties(应用名+properties)
 * 细节：
 *      1）、命名空间
 *          默认public（保留空间），默认新增的所有配置都在publish空间
 *          1、开发、测试、生产环境，可以利用命名空间来做环境隔离
 *          注意：在bootstrap.properties配置上，需要 使用哪个命名空间下的配置
 *          spring.cloud.nacos.config.namespace=68e9ebb3-03f9-4a50-b5e4-d81e7e1118f6
 *          2、每一个微服务之间互相隔离配置，每一个微服务都创建自己的命名空间，只加载自己命名空间下的所有配置
 *      2）、配置集
 *
 *      3)、配置集id
 *      4）、配置集分组
 *          1、创建分组
 *          2、使用某个组的配置，例如双11组的配置
 *          spring.cloud.nacos.config.group=双11
 *同时加载多个配置集
 *      1）、微服务的任何配置信息，都可以放在配置中心中
 *      2）、只需要在bootstrap..properties中说明加载配置中心中哪些配置文件即可
 *      3）、@Value 、@ConfigurationProperties
 *      以前springboot任何方法从配置文件中获取值，都能使用。
 *      配置中心中有的，优先使用配置中心配置
 * ----------------------------------------------------------------------------------------
 *  *
 */


@EnableDiscoveryClient
@MapperScan("com.atguigu.gulimall.gulimallcoupon.dao")
@SpringBootApplication
public class GulimallCouponApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallCouponApplication.class, args);
    }

}
